package co.gov.medellin.ssti.sub.paoyer.common.exception;

/**
 * 
 * <p>
 * Title: ModuleExceptionFactory
 * </p>
 * <p>
 * Description: Factory para generar las Excepciones por cada Modulo
 * </p>
 * Es utlizada por una instancia de las clase UserException o SystemException
 * para visualizar detalles de un error determinado.
 * 
 * @version 1.0
 */

public abstract class ModuleExceptionFactory {

	/**
	 * Devuelve la instancia de la Excepcion correspondiente al Modulo
	 * 
	 * @param module
	 *            String Nombre de la Clase del Modulo
	 * @return ModuleExceptionInterface
	 */
	public static ModuleExceptionInterface getModuleException(String module)
			throws SystemException {

		ModuleExceptionInterface moduleException = null;

		try {
			// Crea la Instancia de la Clase dinamicamente
			Class<?> objectModule = Class.forName(module);
			moduleException = (ModuleExceptionInterface) objectModule
					.newInstance();
			return moduleException;
		} catch (IllegalAccessException iaEx) {
			throw new SystemException(
					new CommonSystemException().getModuleVO(),
					CommonSystemException.MODULE_EXCEPTION_NOT_CREATED);
		} catch (InstantiationException iEx) {
			throw new SystemException(
					new CommonSystemException().getModuleVO(),
					CommonSystemException.MODULE_EXCEPTION_NOT_CREATED);
		} catch (ClassNotFoundException cnfEx) {
			throw new SystemException(
					new CommonSystemException().getModuleVO(),
					CommonSystemException.MODULE_EXCEPTION_NOT_FOUND);
		} catch (ClassCastException ccEx) {
			throw new SystemException(
					new CommonSystemException().getModuleVO(),
					CommonSystemException.CLASS_CAST_MODULE_EXCEPTION);
		}

	}

}